package com.study.design.proxy.cglib;

import com.study.design.adapter.Dog;
import com.study.design.proxy.stc.BuyHouse;
import com.study.design.proxy.stc.BuyHouseImpl;
import net.sf.cglib.proxy.Enhancer;

/**
 * 测试类
 *
 * CGLIB创建的动态代理对象比JDK创建的动态代理对象的性能更高，但是CGLIB创建代理对象时所花费的时间却比JDK多得多。所以对于单例的对象，因为无需频繁创建对象，用CGLIB合适，反之使用JDK方式要更为合适一些。同时由于CGLib由于是采用动态创建子类的方法，对于final修饰的方法无法进行代理。
 *
 * @Author 网易云课堂微专业-java高级开发工程师【allen老师】
 * @Version 1.0
 */
public class CglibProxyTest {
    public static void main(String[] args) {
        BuyHouse buyHouse = new BuyHouseImpl();

        CglibProxy cglibProxy = new CglibProxy();
        BuyHouse buyHouseCglibProxy = (BuyHouse) cglibProxy.getInstance(buyHouse);

        buyHouseCglibProxy.buyHosue();



        //在指定目录下生成动态代理类，我们可以反编译看一下里面到底是一些什么东西
        // System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "D:\\java\\java_workapace");

    }
}
